package com.fanco.learn_datastruct_leetcode.designpattern.command;

/**
 * @author qiaowang 2022/2/17
 * 描述
 */
public class RemoteController {

    // 开按钮的命令数组
    Command [] onCommands;

    Command [] offCommands;

    Command undoCommand;

    public RemoteController () {
        onCommands = new Command[5];
        offCommands = new Command[5];

        for (int i = 0; i < 5; i++) {
            onCommands[i] = new NoCommand();
            offCommands[i] = new NoCommand();
        }
    }

    // 给我们的按钮设置你需要的命令
    public void setCommand(int no , Command onCommand, Command offCommand) {
        onCommands[no] = onCommand;
        offCommands[no] = offCommand;
    }

    // 按下开的按钮
    public void onButtonWasPushed(int no) {
        onCommands[no].execute();
        // 记录这次的操作，用于撤销
        undoCommand = onCommands[no];
    }

    // 按下关的按钮
    public void offButtonWasPushed(int no) {
        offCommands[no].execute();
        // 记录这次的操作，用于撤销
        undoCommand = offCommands[no];
    }

    // 按下撤销按钮
    public void undoButtonWasPushed () {
        undoCommand.undo();
    }

}
